package cn.zlg.common.datadump.condition;

import com.querydsl.core.types.Predicate;

import java.util.List;

/**
 * 每个导出接口，可以定义一个支持的查询条件类。根据定义，从参数中查找需要应用的查询条件
 */
public interface QueryCondtionDef {

    default List<QueryFieldConditionSet> getConditionSet() {
        return null;
    }

    default boolean supportCustomBuild() { return false;}

    default Predicate build(List<QueryFieldWithValue> list) {
        return null;
    }

    default QueryFieldWithValue findField(List<QueryFieldWithValue> fields, String paramName) {
        return fields.stream().filter(f -> f.getCondition().getQueryParamName().equals(paramName)).findFirst().orElse(null);
    }

    default Object findFieldValue(List<QueryFieldWithValue> fields, String paramName) {
        QueryFieldWithValue field = findField(fields, paramName);
        return field == null ? null : field.getValue();
    }

    QueryFieldCondition[] getAllConditionDef();

    SortFieldDef[] getAllSortFieldDef();
}
